package cn.good.yan.service.t5.bloom;

import lombok.extern.slf4j.Slf4j;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Component;

import javax.annotation.Resource;

/**
 * 布隆过滤器 - 工具类
 *
 * @author shengren.yan
 * @create 2023-11-26
 */
@Component
@Slf4j
public class CheckUtils {

    @Resource
    private RedisTemplate redisTemplate;

    /**
     * 判断 该值存不存在 布隆过滤器中
     * @param checkItem  该值
     * @param key        该值
     * @return boolean   true 存在 false 不存在
     */
    public boolean checkWithBloomFilter(String checkItem, String key){
        int hashValue = Math.abs(key.hashCode());
        // 通过hashValue 和 2的32次方后取余，获得对应的下标坑位
        long index = (long) (hashValue % Math.pow(2, 32));
        boolean existOK = redisTemplate.opsForValue().getBit(checkItem, index);
        log.info("---->:" + key +"对应坑位下标index："+ index + "是否存在：" + existOK);
        return existOK;
    }

}
